﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<windows.h>
#include<time.h>

#define WALL L'墙'
#define SNACK L'蛇'
#define EAT L'豆'
#define POS_X 24
#define POS_Y 10
#define Bird_X 50
#define Bird_Y 9
#define BIRD L'鸟'

#define KEY_PRESS(VK)  ((GetAsyncKeyState(VK))&1?1:0)

//创建一个鸟来吃蛇
typedef struct bird
{
	int x;
	int y;
	int n;//用n来代表方向 1是上，2是下
	struct bird* next;
}Bird, *pBird;

enum Direction
{
	UP,
	DOWN,
	RIGHT,
	LEFT
};

enum STATE
{
	FINE,
	KILL_WALL,
	KILL_SELF,
	KILL_BIRD,
	END_NORMAL
};

//设置蛇身节点
typedef struct SnackNode
{
	int x;   //节点在输出设备的坐标
	int y;

	struct SnackNode* next;   //下一个节点
}SnackNode,*pSnackNode;

//设置蛇的总体信息
typedef struct Snack
{
	pSnackNode _pSnack;   //蛇头
	pSnackNode _food;     //食物的位置

	enum Direction _dir;      //蛇的方向
	enum STATE  _state;      //游戏的状态
	int _score;             //总得分
	int _food_weight;         //当前食物的分数
	int _sleep;              //间隔时间，速度
}Snack,*pSnack;


//开始界面
void Looking(void);

//游戏进入界面
void Game_WELCOM(void);

//对光标位置进行修改
void SetPos(int x, int y);

//隐藏光标
void hidegb(void);

//修改控制台
void setkzt(void);

//游戏欢迎界面，第一个界面
void PAGE_01(void);

//游戏玩法说明界面，第二个界面
void PAGE_02(void);

//准备开始界面
void GAME_PRE(void);

//游戏开始界面
void GAME_START(pSnack sp);

//打印右侧的说明界面
void PRINT_RULE(pSnack sp);

//先打印墙体
void PRINT_WALL(void);

//创建蛇，并打印
void CREAT_Snack(pSnack sp);

//创建食物
void CREAT_FOOD(pSnack sp);

//初始化蛇的状态
void SNACK_NORMAL(pSnack sp);

//运行游戏
void GAME_CONTINUE(pSnack sp);

//游戏结束
void GAME_OVER(pSnack sp);
